package gest;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CriarMedicos {

	static Scanner in = new Scanner (System.in);
	static Registry reg;
	static Gestao g = null;
	static Medico m;
	String ficheiro;
	
	public CriarMedicos(){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g= new Gestao_Impl();		
	}
	
	public CriarMedicos(int licenca, String nome, String esp){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			m = g.cria_medico(licenca);
			m.set_nome(nome);
			m.set_especialidade(esp.toUpperCase());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	public CriarMedicos(String nomeficheiro) throws IOException{
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		this.ficheiro = nomeficheiro;
		BufferedReader br = new BufferedReader (new FileReader (this.ficheiro));
		StringTokenizer st = null;
		String teste;
		while((teste = br.readLine()) != null){
			st = new StringTokenizer(teste, ";");
			int li= Integer.parseInt(st.nextToken());
			m = g.cria_medico(li);
			String nome = st.nextToken();
			m.set_nome(nome);
			String esp=st.nextToken();
			m.set_especialidade(esp.toUpperCase());	
			imprimeinfo();
		}
	}

	public static void main(String[] args){	
		if(args[0].equals("-v")){			
			new CriarMedicos(Integer.parseInt(args[1]),args[2],args[3]);
			imprimeinfo();
			System.exit(0);
		}
		else if (args[0].equals("-f")){
			try {
				new CriarMedicos(args[1]);
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if(args[0].equals("-i")){
			CriarMedicos cm = new CriarMedicos();
			CriarMedicos.criar();
			CriarMedicos.resposta();
		}
		else System.out.println("Atributos Incorrectos");
	}
	
	public static void imprimeinfo(){
		try {
			System.out.println(m.get_nlicenca()+" "+m.get_nome()+" "+m.get_especialidade());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	public static void criar(){
		System.out.println("Inserir nº licença:");
		try {			
			int a = Integer.parseInt(in.nextLine());
			m = g.cria_medico(a);
		} catch (RemoteException e) {
			System.out.println("Falha de Ligacao");
			e.printStackTrace();
		}
	}
	
	public static void inserirespecialidade() {
		System.out.println("Insira especialidade:");
		String esp = in.nextLine().toUpperCase();
		try {
			m.set_especialidade(esp);
			System.out.println("Informação Actualizada!!");
		} catch (RemoteException e) {
			e.printStackTrace();
		}		
	}

	public static void inserirnome() {
		System.out.println("Insira o nome:");
		String nome = in.nextLine();
		try {
			m.set_nome(nome);
			System.out.println("Informação Actualizada!!");
		} catch (RemoteException e) {
			e.getStackTrace();
		}
	}
	
	public static void info() {
		System.out.println("Deseja Alterar alguma informação:");
		System.out.println("1 - nome");
		System.out.println("2 - especialidade");
		System.out.println("3 - ver dados");
		System.out.println("4 - sair");
	}
	
	public static void resposta(){
		info();
		int a=0;
		try{
		a = Integer.parseInt(in.nextLine());
		switch(a){
		case 1:
			inserirnome();
			resposta();
			break;
		case 2:
			inserirespecialidade();
			resposta();
			break;
		case 3:
			imprimeinfo();
			resposta();
			break;
		case 4:
			System.exit(0);
			break;
		default:
			resposta();
			break;
		}
		}catch(java.lang.NumberFormatException e){
			System.out.println("Opccao invalida!!!!");
			resposta();
		}
	}
	
}